import torch
import numpy asnp

# torch.nn库为专门为神经网络涉及的模块化接口
# nn库构建于autograd之上，可以用于定义和运行神经网络


# nn.Parameter # 定义可训练参数
#   self.my_param = nn.Parameter(torch.randn(size)) # 定义参数
#   self.register_paremeter = v # 注册训练参数
# nn.ParameterList & nn.ParameterDict
# 
# nn.Linear & nn.conv2D & nn.ReLU & nn.MaxPool2d & nn.MSELoss等
#   各种神经网络层，基本继承于nn.Module父类
#   网络层的定义：self.conv1 = nn.Conv2d(1, 6, (5, 5))
#   网络层调用：self.conv1(inputs)
#   网络层参数为Parameter类型
# 示例
from torch import nn
layer = nn.Linear(1, 1) # 定义网络层
layer.weight = nn.Parameter(torch.FloatTensor([[0]])) # 定义层的w参数
layer.bias = nn.Parameter(torch.FloatTensor([[0]])) # 定义层的b参数

# nn.functional库包含nn库中的所有函数，包含大量的loss和activation function
#   torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
# 注意
#   nn.functional.xxx 为函数接口
#   nn.functional.xxx 无法与nn.Sequential结合使用
# 没有学习参数的函数如maxpool,loss_func,activate_function等根据个人选择使用nn.functional.xxx or nn.Xxx
# dropout层
# nn库与nn.functional库的区别，建议使用nn库
#
# nn.Sequential # 类似于keras的定义模型，顺序化构建网络结构
#
# 自定义网络层：通过继承父类nn.Module创建新层库类
# 
# nn.Module为抽象网络层，即可表示神经网络中的某个层，也可以表示一个包含很多层的神经网络结构


# torch的可视化工具 visdom可视化工具的安装
# tensorboardX数据图像、模型可视化工具的安装及使用
# torchvision库：提供用于图像基本处理的库